###############################################
# Meta-analysis 20: Political intolerance
###############################################

# 0) User paths
PATH <- ""   

path_meta_polintol        <- file.path(PATH, "Datasets", "meta.politicalintolerance.csv")
path_meta_polintol_biv    <- file.path(PATH, "Datasets", "meta.politicalintolerance_biv.csv")
path_meta_polintol_random <- file.path(PATH, "Datasets", "meta.politicalintolerance_random.csv")
path_out_csv              <- file.path(PATH, "Results",  "20.results_politicalintolerance_models.csv")

# 1) Settings
outcome_name <- "Political intolerance"

# 2) Packages
suppressPackageStartupMessages({ library(metafor) })

# 3) Load data
meta.polintol        <- read.csv(path_meta_polintol,        stringsAsFactors = FALSE)
meta.polintol_biv    <- read.csv(path_meta_polintol_biv,    stringsAsFactors = FALSE)
meta.polintol_random <- read.csv(path_meta_polintol_random, stringsAsFactors = FALSE)

# 4) Basic checks
required_cols <- c("authoryear", "yi", "vi")
stopifnot(all(required_cols %in% names(meta.polintol)))
stopifnot(all(required_cols %in% names(meta.polintol_biv)))
stopifnot(all(required_cols %in% names(meta.polintol_random)))

# 5) Full, all 3-level RE
full_all_fit <- rma.mv(yi, vi, random = ~ 1 | authoryear/row.names(meta.polintol),
                       data = meta.polintol, test = "t")
full_all_df <- data.frame(
  coef = unname(full_all_fit$beta), ci.lb95 = full_all_fit$ci.lb, ci.ub95 = full_all_fit$ci.ub,
  pval = full_all_fit$pval, outcome = outcome_name,
  n = length(unique(meta.polintol$authoryear)), k = nrow(meta.polintol),
  sample_type = "All", model_type = "Full"
)

# 6) Bivariate, all 3-level RE
biv_all_fit <- rma.mv(yi, vi, random = ~ 1 | authoryear/row.names(meta.polintol_biv),
                      data = meta.polintol_biv, test = "t")
biv_all_df <- data.frame(
  coef = unname(biv_all_fit$beta), ci.lb95 = biv_all_fit$ci.lb, ci.ub95 = biv_all_fit$ci.ub,
  pval = biv_all_fit$pval, outcome = outcome_name,
  n = length(unique(meta.polintol_biv$authoryear)), k = nrow(meta.polintol_biv),
  sample_type = "All", model_type = "Bivariate"
)

# 7) Full, quasi-experimental 3-level RE
full_random_fit <- NA
full_random_df <- data.frame(
  coef = NA, ci.lb95 = NA, ci.ub95 = NA,
  pval = NA, outcome = outcome_name,
  n = length(unique(meta.polintol_random$authoryear)), 
  k = nrow(meta.polintol_random),
  sample_type = "Quasi-experimental", model_type = "Full"
)

# 8) Combine and save
out_models <- rbind(full_all_df, biv_all_df, full_random_df)
print(out_models, row.names = FALSE)
if (!is.null(path_out_csv)) write.csv(out_models, path_out_csv, row.names = FALSE)
